/* * * $Id: googlesearch.js 3235 2009-05-29 12:21:28Z antonenkova $ * */ $.fn.replaceWith = function(html) { return this.after(html).remove(); }; $.fn.addSearchExit = function() { this.append("
Закончить поиск
"); $(".searchExit", $(this)).click(function() { $("#resultGoogleSearch").empty(); $("#googleSearchMain").empty(); $("#indexPage").show(); }); return this; }; $.fn.addSearchFor = function() { $(".searchText", $(this)).after("
Поискать по другим разделам >>
"); $(".searchSite", $(this)).click(function() { $("#indexPage").hide(); $("#resultGoogleSearch").hide(); GoogleSearch.createOptions(); $("#googleSearchMain input[type=radio]").click(function() { GoogleSearch.searchForOptions(); }); }); if (GoogleSearch.searchFor == "+site%3Aforum.autosputnik.com/") { this.append("
Посмотреть результаты поиска по сайту >>
"); $(".searchBottom", $(this)).click(function() { GoogleSearch.searchFor = "+site%3Aautosputnik.com/+-site%3Aforum.autosputnik.com/"; GoogleSearch.searchForText = "по всему сайту"; GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus); }); } else { this.append("
Посмотреть результаты поиска по форуму >>
"); $(".searchBottom", $(this)).click(function() { GoogleSearch.searchFor = "+site%3Aforum.autosputnik.com/"; GoogleSearch.searchForText = "по форуму"; GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus); }); } return this; }; $.fn.addGASText = function() { return this.append("
Используется Google Ajax Search
"); }; $.ajax({ url: "http://autosputnik.com/get-search-words/?callback=?", dataType: "jsonp", success: function(data) { words = data; } }); var GoogleSearch = { searchFor: "+site%3Aautosputnik.com/+-site%3Aforum.autosputnik.com/", searchForText: "по всему сайту", googleCallback: function(func, data){ window[func](data); }, noResult: function(query){ $("#resultGoogleSearch") .empty() .append("
поиск " + GoogleSearch.searchForText + "
По запросу \"" + query + "\" ничего не найдено
") .addSearchFor() .addSearchExit() .addGASText() .show(); }, createResult: function(query, startSearch, queryStatus){ $("#googleSearchUserOptionsApply").remove(); GoogleSearch.createForm(); var url = "http://ajax.googleapis.com/ajax/services/search/web?" + "v=1.0" + "&key=" + AJAX_SEARCH_API_KEY + "&q=" + query + GoogleSearch.searchFor + "&rsz=large" + "&start=" + startSearch + "&callback=GoogleSearch.googleCallback" + "&context=?"; $.ajax({ url: url, dataType: "jsonp", success: function(data) { if (!data.results | data.results.length == 0 | !queryStatus){ GoogleSearch.noResult(query); } else { var ul = document.createElement("ul"); $(ul).addClass("result"); $.each(data.results, function(i, val){ var li = document.createElement("li"); li.innerHTML = "" + val.title + "" + "
" + val.content + "
"; ul.appendChild(li); }); if (data.cursor.estimatedResultCount > 8){ var pager = document.createElement("ul"); $(pager).addClass("pager"); $.each(data.cursor.pages, function(i, val){ var li = document.createElement("li"); $(li).text(val.label).addClass(val.start); $(li).text() == data.cursor.currentPageIndex+1 ? $(li).addClass("active") : null; pager.appendChild(li); }); if (!$(pager.childNodes).hasClass("active")) { $(pager.lastChild).addClass("active"); } if ($(pager.lastChild).hasClass("active")) { var div = document.createElement("div"); $(div).addClass("moreResult"); div.innerHTML = "Дополнительные результаты в Google >>"; } } $("#resultGoogleSearch") .html(ul) .prepend("
поиск " + GoogleSearch.searchForText + "
результаты по запросу \"" + query + "\"
") .append(pager) .append(div) .addSearchFor() .addSearchExit() .addGASText() .show(); $("ul.pager li").not(".active").click(function(){ GoogleSearch.createResult(query, $(this).attr("className"), queryStatus); }); } } }); }, checkQuery: function(searcher){ GoogleSearch.query = $("form input", $(searcher)).val(); if (GoogleSearch.query.length != 0) { $("#indexPage").hide(); GoogleSearch.queryStatus = true; var query_query = GoogleSearch.query.replace(/[^\wа-яА-Я]/g, ""); $(words).each(function() { if ( query_query.toLowerCase() == this.toLowerCase()) { GoogleSearch.queryStatus = false; } }); $("form", $(searcher)).resetForm(); GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus); } }, createForm: function() { var html = "
" + "
" + "" + "" + "
" + "
" + "
Закончить поиск
" + "
настройки
"; $("#googleSearchMain").html(html); $(".searchExit").click(function() { $("#resultGoogleSearch").empty(); $("#googleSearchMain").empty(); $("#indexPage").show(); GoogleSearch.query = null; }); GoogleSearch.setSearch("#googleSearchMain"); GoogleSearch.setOptionClick("#optionMainGoogleSearch"); }, createOptions: function() { var html = "
" + "Выберите, где будет производиться поиск:" + "
" + "
" + "" + "" + "
" + "
" + "" + "" + "
" + "
" + "" + "" + "
" + "
" + "
Закрыть
" + "
"; $("#googleSearchMain").append(html); $("#googleSearchUserOptions .optionsExit").click(function() { GoogleSearch.getOptions(); $("#googleSearchUserOptions").remove(); $("#resultGoogleSearch").show(); }); }, getOptions: function() { GoogleSearch.searchFor = $("#googleSearchUserOptions input[@type='radio']:checked").val(); GoogleSearch.searchForText = $("#googleSearchUserOptions input[@type='radio']:checked").next().text(); }, searchForOptions: function() { GoogleSearch.getOptions(); GoogleSearch.createResult(GoogleSearch.query, 0, GoogleSearch.queryStatus); }, setSearch: function(searcher) { $("form input[type=text]", $(searcher)).keypress(function(event){ if (event.which == "13") { event.preventDefault(); GoogleSearch.checkQuery(searcher); } }); $("form input[type=submit]", $(searcher)).click(function(event){ event.preventDefault(); GoogleSearch.checkQuery(searcher); }); }, setOptionClick: function(searcher) { $(searcher).click(function() { $("#indexPage").hide(); $("#resultGoogleSearch").hide(); $("#googleSearchUserOptions").remove(); if (GoogleSearch.query) { GoogleSearch.createOptions(); $("#googleSearchMain input[type=radio]").click(function() { GoogleSearch.searchForOptions(); }); } else { GoogleSearch.createForm(); GoogleSearch.createOptions(); } $("#googleSearchMain input[type=radio]").click(function() { GoogleSearch.getOptions(); }); }); } }; $(function(){ GoogleSearch.setSearch("#googleSearch"); GoogleSearch.setOptionClick("#optionGoogleSearch"); });